package org.heart.entity.dto;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * <p>
 * 用户基本信息表
 * </p>
 *
 * @author lml
 * @since 2025-06-16
 */
@TableName("l_user_base_info")
@Data
public class UserBaseInfo implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 用户唯一ID(可以使用微信openid或自行生成UUID)
     */
    @TableId(type= IdType.ASSIGN_ID)
    private String userId;

    /**
     * 微信openid，微信用户的唯一标识
     */
    private String openid;

    /**
     * 微信unionid，用于跨应用统一用户标识
     *
     * 存放：session_key
     */
    private String unionid;

    /**
     * 用户昵称，来自微信用户资料
     */
    private String nickname;

    /**
     * 用户头像URL，来自微信用户资料
     */
    private String avatarUrl;

    /**
     * 性别:0-未知,1-男性,2-女性
     */
    private Integer gender;

    /**
     * 密码
     */
    private String password;

    /**
     * 国家，来自微信用户资料
     */
    private String country;

    /**
     * 省份，来自微信用户资料
     */
    private String province;

    /**
     * 城市，来自微信用户资料
     */
    private String city;

    /**
     * 语言偏好，如zh_CN, en_US等
     */
    private String language;

    /**
     * 手机号码
     */
    private String phoneNumber;

    /**
     * 电子邮箱(用户可选填写)
     */
    private String email;

    /**
     * 账号状态:0-禁用,1-正常
     */
    private Integer status;

    /**
     * 注册时间，格式YYYY-MM-DD HH:MM:SS
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date registerTime;

    /**
     * 最后登录时间，格式YYYY-MM-DD HH:MM:SS
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date lastLoginTime;

    /**
     * 最后登录IP地址
     */
    private String lastLoginIp;

    /**
     * 设备信息，JSON格式，包含设备型号、操作系统等信息
     */
    private String deviceInfo;

    /**
     * 用户设置，JSON格式，存储个性化配置
     */
    private String settings;

    /**
     * 用户介绍
     */
    private String userInfo;

    /**
     * 关注人数
     */
    @TableField(exist = false)
    private Integer userCnt;

    /**
     * 累计使用天数
     */
    @TableField(exist = false)
    private Integer userDay;

}
